import axios from "axios";
import { showToast, showFailToast } from "vant";
import { useAuthStore } from "@/stores/authStore";
import { startLoading, endLoading } from "./loading";

// 在文件顶部添加一个等待设备指纹生成的函数
const waitForDeviceFingerprint = () => {
  return new Promise((resolve) => {
    const check = () => {
      // 检查设备指纹是否已生成
      if (localStorage.getItem("device_fingerprint")) {
        resolve();
      } else {
        // 每50ms检查一次
        setTimeout(check, 50);
      }
    };
    check();
  });
};

// 工厂模式创建服务（接收 Pinia 实例）
export const createService = (pinia) => {
  const authStore = useAuthStore(pinia); // 正确获取 Store
  const service = axios.create({
    baseURL: import.meta.env.VITE_BASE_API,
    timeout: 10000,
  });

  // 修改请求拦截器
  service.interceptors.request.use(
    async (config) => {
      // 改为 async 函数
      // 检查是否需要显示 loading (默认显示)
      if (config.showLoading !== false) {
        startLoading();
      }

      // 等待设备指纹生成（排除不需要设备指纹的接口）
      if (!config.noNeedFingerprint) {
        await waitForDeviceFingerprint();
      }
      const token = localStorage.getItem("token");
      if (token) {
        config.headers.Authorization = `Bearer ${token}`;
      }
      return config;
    },
    (error) => {
      if (error.config?.showLoading !== false) {
        endLoading();
      }
      return Promise.reject(error);
    }
  );

  service.interceptors.response.use(
    (response) => {
      // 结束 loading
      if (response.config.showLoading !== false) {
        endLoading();
      }
      const res = response.data;
      // console.log('状态：',res.code)
      if (res.code !== 200) {
        showToast(res.message || "Request Error");
        // if (Number(res.code) === 401) {
        //   localStorage.removeItem("token");
        //   localStorage.removeItem("auth-store");
        //   authStore.token = "";
        //   // 登录成功，刷新页面
        //   setTimeout(() => {
        //     authStore.showLoginDialog(); // 触发登录弹窗
        //   }, 100);
        // }
        return Promise.reject(res);
      }
      return res; // 返回核心数据
    },
    (error) => {
      // 结束 loading
      if (error.config?.showLoading !== false) {
        endLoading();
      }
      // 统一错误处理
      const errorMessage = error.response?.data?.message || error.message || "request failure";

      showFailToast(errorMessage);
      return Promise.reject(error);
    }
  );

  return service;
};

// 必须导出默认
export default createService;
